<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of persistenciaClienteParticular
 *
 * @author Agustin
 */
require_once 'persistenciaCliente.php';
require_once 'persistenciaTelefono.php';
require_once 'persistenciaLugar.php';

class PersistenciaClienteParticular extends PersistenciaCliente {

    private static $instancia;

    public static function getInstance() {
        if (!self::$instancia instanceof self) {
            self::$instancia = new self;
        }
        return self::$instancia;
    }

    public function buscarClientePNombre($datos) {
        $nombre = $datos[0];
        $apellido = $datos[1];
        if ($nombre != '' || $apellido != '') {
            $resarr = $this->buscarClienteNombrePart($nombre, $apellido);
            $arrayres = array();
            if (is_array($resarr)) {
                foreach ($resarr as $row) {
                    $arrayres[] = $this->armarClientePart($row['idcliente'], $row['nombre'], $row['responsable'], $row['apellido'], null, null);
                }
            }
            return $arrayres;
        }
    }

    public function buscarClientePId($id) {
        $telDB = PersistenciaTelefono::getInstance();
        $lugDB = PersistenciaLugar::getInstance();
        $arrayres = $this->buscarClienteIdPart($id);
        $lugares = $lugDB->traerLugares($arrayres['idcliente']);
        $telefonos = $telDB->traerTelefonosClientes($arrayres['idcliente']);
        $cli = $this->armarClientePart($arrayres['idcliente'], $arrayres['nombre'], $arrayres['responsable'], $arrayres['apellido'], $lugares, $telefonos);
        return $cli;
    }

    public function agregarClienteP($datos) {
        $nombre = $datos[0];
        $responsable = $datos[1];
        $apellido = $datos[2];
        try {
            $addCli = $this->agregarCliente($nombre, $responsable);
            $addCliA = $this->agregarClientePartPersist($apellido);
            if ($addCli && $addCliA) {
                return 'Guardado con éxito';
            } else {
                return 'Ha ocurrido un error.';
            }
        } catch (Exception $ex) {
            throw $ex;
        }
    }

    public function actualizarClienteP($datos) {
        $idcliente = $datos[0];
        $nombre = $datos[1];
        $responsable = $datos[2];
        $apellido = $datos[3];
        $actCli = $this->actualizarCliente($idcliente, $nombre, $responsable);
        $actCliA = $this->actualizarClientePartPersist($idcliente, $apellido);
        if ($actCli && $actCliA) {
            return 'Guardado con éxito';
        } else {
            return 'Ha ocurrido un error.';
        }
    }

    public function buscarClienteNombrePart($nombre, $apellido) {
        try {
            require_once 'conexion.php';
            $db = conexion::getInstance();
            $db->conectar();
            $consulta = 'SELECT clientes.idcliente, nombre, responsable, apellido FROM clientes INNER JOIN (SELECT * FROM clientesparticulares) AS cli WHERE clientes.idcliente = cli.idcliente and ';
            $nombreConsulta = 'nombre like "' . $nombre . '%"';
            $apellidoConsulta = 'apellido like "' . $apellido . '%"';
            if ($nombre != '' && $apellido != '') {
                $consulta .= $nombreConsulta . ' and ' . $apellidoConsulta;
            } else if ($nombre == '') {
                $consulta .= $apellidoConsulta;
            } else {
                $consulta .= $nombreConsulta;
            }
            $consulta .= ';';
            $resultado = $db->consulta($consulta);
            if (count($resultado) > 0) {
                return $resultado;
            } else {
                return 'No existe ese cliente.';
            }
        } catch (Exception $ex) {
            throw new Exception('Error en la conexión con la base de datos.');
        }
    }

    private function buscarClienteIdPart($id) {
        require_once 'conexion.php';
        $db = conexion::getInstance();
        try {
            $db->conectar();
            $sentencia = 'SELECT clientes.idcliente, nombre, responsable, apellido FROM clientes INNER JOIN (SELECT * FROM clientesparticulares) AS cli WHERE clientes.idcliente = cli.idcliente and clientes.idcliente = ' . $id . ';';
            $resultado = $db->consulta($sentencia);
            if (count($resultado) > 0) {
                return $resultado[0];
            } else {
                return 'No existe ese cliente.';
            }
        } catch (Exception $ex) {
            throw new Exception('Error en la conexión con la base de datos.');
        }
    }

    private function agregarClientePartPersist($apellido) {
        require_once 'conexion.php';
        $db = conexion::getInstance();
        try {
            $db->conectar();
            $consulta = 'insert into clientesparticulares (apellido, idCliente) values ("' . $apellido . '", ' . $db->obtenerUltimoID() . ');';
            $db->consulta($consulta);
            return true;
        } catch (Exception $ex) {
            throw new Exception('Error en la conexión con la base de datos.');
        }
    }

    private function actualizarClientePartPersist($id, $apellido) {
        try {
            require_once 'conexion.php';
            $db = conexion::getInstance();
            $db->conectar();
            $consulta = 'update clientesparticulares set apellido="' . $apellido . '" where idcliente=' . $id;
            $db->consulta($consulta);
            return true;
        } catch (Exception $ex) {
            throw new Exception('Error en la conexión con la base de datos.');
        }
    }

    private function armarClientePart($id, $nombre, $responsable, $apellido, $lugares, $telefonos) {
        require_once 'clienteParticular.php';
        $cliente = new ClienteParticular();
        $cliente->nombre = $nombre;
        $cliente->id = $id;
        $cliente->responsable = $responsable;
        $cliente->apellido = $apellido;
        $cliente->lugares = $lugares;
        $cliente->telefonos = $telefonos;
        return $cliente;
    }

}

?>
